package com.giCompiler.business;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import com.giCompiler.bean.CodigoFonte;
import com.giCompiler.bean.Pacote;
import com.giCompiler.dao.CodigoFonteDao;
import com.giCompiler.dao.PacoteDao;
import com.giCompiler.util.HibernateUtil;

public class ExcluirPacoteBusiness {
	
	public void excluirPacoteBusiness(int idPacote, int idProjeto){
	
		List<Pacote> pacotes = new ArrayList<Pacote>();
		PacoteDao pacoteDao = new PacoteDao();	
		CodigoFonteDao codigoFonteDao = new CodigoFonteDao();
		
		//Adiciona o pacote raiz na lista
		Pacote pacote = new Pacote();
		pacote.setIdPacote(idPacote);
		pacote.setIdProjeto(idProjeto);
		pacotes.add(pacote);
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		
		pegarSubPacotes(idPacote, idProjeto, pacotes, session);
		
		session.close();

		for(Pacote p: pacotes){
			CodigoFonte cf = new CodigoFonte();
			cf.setIdPacote(p.getIdPacote());
			codigoFonteDao.excluir(cf);
			pacoteDao.excluir(p);
		}		
	}
	
	//O pega os sub-pacotes de um determinado pacote
	public void pegarSubPacotes(int idPacote, int idProjeto, List<Pacote> pacotes, Session session){

		List<Pacote> pacs = new ArrayList<Pacote>();
		PacoteDao pacoteDao = new PacoteDao();	
						
		pacs = pacoteDao.pegarPacote(idPacote, idProjeto, session);
		
		for(Pacote p: pacs){
			pacotes.add(p);
			pegarSubPacotes(p.getIdPacote(), idProjeto, pacotes, session);		    
		}		
	}	
}
